/*
 * Logger.h
 *
 *  Created on: 26/04/2014
 *      Author: ltessore
 */

#ifndef LOGGER_H_
#define LOGGER_H_
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sstream>

namespace LOG_MODE
{
    // Enum de tipo de log
    enum Log_Values{
       ERROR,
       WARN,
       INFO
    };
}
class Logger {

public:

	/* Constructor */
	Logger(const char* file_name, const char* name_process, pid_t pid_process, bool activate);
	/* Loguea en nivel info */
	int info(const char* text);
	/* Loguea en nivel warn */
	int warn(const char* text);
	/* Loguea en nivel error */
	int error(const char* text);
	/* Destructor */
	virtual ~Logger();

protected:
	/* Escribe el archivo de log */
	int write_text(LOG_MODE::Log_Values mode,const char * text);

private:

	/* Toma el lock */
	int take_lock();
	/* Deja el lock */
	int leave_lock();
	/* Convierte a un formato standard el text recibido con su pid */
	const char* convert_text(LOG_MODE::Log_Values mode,const char * text);
	/* Devuelve en una cadena el nombre del nivel de logueo */
	const char* get_mode_text(LOG_MODE::Log_Values mode);

private:

	int fd_; // file descriptor del archivo de log
	char * file_name_; // Nombre de archivo del log
	struct flock fl_ ; // Struct para el lock
	char *name_process_; // Nombre del proceso que usa el logger
	pid_t pid_process_; // Pid del proceso que usa el logger
    bool activate_; // Indica si esta o no activado el logger
};


#endif /* LOGGER_H_ */
